package com.web.service.Impl;

import com.web.dao.DeviceGroupDao;
import com.web.pojo.domain.Device;
import com.web.pojo.domain.DeviceGroup;
import com.web.pojo.dto.DeviceGroupAddDeviceDTO;
import com.web.service.DeviceGroupServer;
import com.web.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author: wws
 * describe:
*/
@Service
public class DeviceGroupServerImpl implements DeviceGroupServer {

    @Autowired
    DeviceGroupDao deviceGroupDao;

    @Override
    public Integer insertDeviceGroup(DeviceGroup deviceGroup) {
        Integer userId = SecurityUtils.getUserId();
        deviceGroupDao.insertDeviceGroup(deviceGroup);
        return deviceGroupDao.insertUserDeviceGroup(userId,deviceGroup.getDeviceGroupId());
    }

    /**
     * 修改设备分组信息
     * @param deviceGroup 分组信息
     * @return 结果
     */
    @Override
    public Integer updateDeviceGroup(DeviceGroup deviceGroup) {
        return deviceGroupDao.updateDeviceGroup(deviceGroup);
    }

    /**
     * 删除设备组
     * @param username 删除者
     * @param deviceGroupIds 组ids
     * @return
     */
    @Override
    public Integer deleteDeviceGroup(String username,List<Integer> deviceGroupIds) {
        deviceGroupDao.deleteDeviceGroup(username,deviceGroupIds);
        return deviceGroupDao.deleteDevicesInTheDeviceGroup(deviceGroupIds);
    }
    /**
     * 查看设备组
     * @param str 查询条件
     * @param userId 用户id
     * @return 结果
     */
    @Override
    public List<DeviceGroup> selectDeviceGroupList(String str,Integer userId) {
        return deviceGroupDao.selectDeviceGroupList(str,userId);
    }

    /**
     * 根据组Id查询设备组地址
     * @param deviceGroupIds 组id
     * @return 结果
     */
    @Override
    public List<DeviceGroup> selectDeviceGroupAddrById(List<Integer> deviceGroupIds) {
        return deviceGroupDao.selectDeviceGroupAddrById(deviceGroupIds);
    }

    /**
     * 将设备添加到设备组中
     * @param deviceId 设备Id
     * @param deviceGroupIds 设备组
     * @return 结果
     */
    @Override
    public Integer addDeviceToDeviceGroup(Integer deviceId, List<Integer> deviceGroupIds) {
        return deviceGroupDao.addDeviceToDeviceGroup(deviceId,deviceGroupIds);
    }

    /**
     * 往设备组中添加设备
     * @param dto 数据
     * @return 结果
     */
    @Override
    public Integer deviceGroupAddDevice(DeviceGroupAddDeviceDTO dto) {
        return deviceGroupDao.deviceGroupAddDevice(dto.getDeviceGroupId(),dto.getDeviceIds());
    }

    /**
     * 根据Id查询组信息
     * @param deviceGroupId 组id
     * @return 结果
     */
    @Override
    public DeviceGroup selectDeviceGroupById(Integer deviceGroupId) {
        return deviceGroupDao.selectDeviceGroupById(deviceGroupId);
    }

    /**
     * 根据设备组id查询设备
     * @param groupId 设备id
     * @return 结果
     */
    @Override
    public List<Device> selectDeviceListByGroupId(Integer groupId) {
        return deviceGroupDao.selectDeviceListByGroupId(groupId);
    }

    /**
     * 查询设备组下设备的网关
     * @param groupId
     * @return
     */
    @Override
    public List<String> selectDeviceGateWay(Integer groupId) {
        return null;
    }

    /**
     * 查询设备可以分配的用户组
     * @param deviceId 设备
     * @return 结果
     */
    @Override
    public List<DeviceGroup> selectAssignableDeviceGroup(Integer deviceId,Integer userId) {
        return deviceGroupDao.selectAssignableDeviceGroup(deviceId,userId);
    }

    /**
     * 查询不在组中的设备
     * @param userId 用户id
     * @param groupId 组id
     * @return 结果
     */
    @Override
    public List<Device> selectDeviceNotInGroup(Integer userId, Integer groupId) {
        return deviceGroupDao.selectDeviceNotInGroup(userId,groupId);
    }
}
